<!DOCTYPE html>
<html>
<head>
    <#import "./common/common.macro.ftl" as netCommon>
    <@netCommon.commonStyle />
    <title>${I18n.admin_name}</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        a {
            text-decoration: none !important;
        }

        img {
            width: 80% !important;
        }

        ul li {
            list-style: none;
        }

        .bg-aqua, .callout.callout-info, .alert-info, .label-info, .modal-info .modal-body {
            background: none !important;
        }

        .callout.callout-info {
            border: none;
        }

        .content-wrapper p, .content-wrapper div,
        .content-wrapper li,
        .content-wrapper pre,
        .content-wrapper h1,
        .content-wrapper h2,
        .content-wrapper h3,
        .content-wrapper span,
        .content-wrapper h4 {
            color: #333;
        }
        pre{
            width: 80% !important;
        }
    </style>
</head>
<body class="hold-transition skin-blue sidebar-mini <#if cookieMap?exists && cookieMap["xxljob_adminlte_settings"]?exists && "off" == cookieMap["xxljob_adminlte_settings"].value >sidebar-collapse</#if> ">
<div class="wrapper">
    <!-- header -->
    <@netCommon.commonHeader />
    <!-- left -->
    <@netCommon.commonLeft "help" />

    <!-- Content Wrapper. Contains page content -->
    <div class="content-wrapper">
        <!-- Content Header (Page header) -->
        <section class="content-header">
            <h1>${I18n.job_help}</h1>
        </section>

        <!-- Main content -->
        <section class="content">
            <div class="callout callout-info">
                <br>
                <article class="markdown-section" id="main">
                    <h3 id="_40-配置执行器"><span>1. 配置执行器</span>
                    </h3>
                    <p>点击进入"执行器管理"界面, 如下图:</p>
                    <p><img src="${request.contextPath}/static/img/img_Hr2T.png"
                            data-origin="${request.contextPath}/static/img/img_Hr2T.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p>
                    <pre v-pre="" data-lang=""><code class="lang-">1、"调度中心OnLine:"右侧显示在线的"调度中心"列表, 任务执行结束后, 将会以failover的模式进行回调调度中心通知执行结果, 避免回调的单点风险;
2、"执行器列表" 中显示在线的执行器列表, 可通过"OnLine 机器"查看对应执行器的集群机器。</code></pre>
                    <p>点击按钮 "+新增执行器" 弹框如下图, 可新增执行器配置:</p>
                    <p><img src="${request.contextPath}/static/img/img_V3vF.png"
                            data-origin="${request.contextPath}/static/img/img_V3vF.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p>
                    <h4 id="执行器属性说明"><span>执行器属性说明</span></h4>
                    <pre v-pre="" data-lang=""><code class="lang-">AppName: 是每个执行器集群的唯一标示AppName, 执行器会周期性以AppName为对象进行自动注册。可通过该配置自动发现注册成功的执行器, 供任务调度时使用;
名称: 执行器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提高执行器的可读性;
排序: 执行器的排序, 系统中需要执行器的地方,如任务新增, 将会按照该排序读取可用的执行器列表;
注册方式：调度中心获取执行器地址的方式；
自动注册：执行器自动进行执行器注册，调度中心通过底层注册表可以动态发现执行器机器地址；
手动录入：人工手动录入执行器的地址信息，多地址逗号分隔，供调度中心使用；
机器地址："注册方式"为"手动录入"时有效，支持人工维护执行器的地址信息；</code></pre>
                    <h3 id="_41-新建任务"><span>2. 新建任务</span>
                    </h3>
                    <p>进入任务管理界面，点击“新增任务”按钮，在弹出的“新增任务”界面配置任务属性后保存即可。详情页参考章节 "三、任务详解"。</p>
                    <h4 id="配置属性详细说明："><span>配置属性详细说明：</span></h4><pre v-pre="" data-lang=""><code class="lang-">- 执行器：任务的绑定的执行器，任务触发调度时将会自动发现注册成功的执行器, 实现任务自动发现功能; 另一方面也可以方便的进行任务分组。每个任务必须绑定一个执行器, 可在 "执行器管理" 进行设置;
- 任务描述：任务的描述信息，便于任务管理；
- 路由策略：当执行器集群部署时，提供丰富的路由策略，包括；
    FIRST（第一个）：固定选择第一个机器；
    LAST（最后一个）：固定选择最后一个机器；
    ROUND（轮询）：；
    RANDOM（随机）：随机选择在线的机器；
    CONSISTENT_HASH（一致性HASH）：每个任务按照Hash算法固定选择某一台机器，且所有任务均匀散列在不同机器上。
    LEAST_FREQUENTLY_USED（最不经常使用）：使用频率最低的机器优先被选举；
    LEAST_RECENTLY_USED（最近最久未使用）：最久为使用的机器优先被选举；
    FAILOVER（故障转移）：按照顺序依次进行心跳检测，第一个心跳检测成功的机器选定为目标执行器并发起调度；
    BUSYOVER（忙碌转移）：按照顺序依次进行空闲检测，第一个空闲检测成功的机器选定为目标执行器并发起调度；
    SHARDING_BROADCAST(分片广播)：广播触发对应集群中所有机器执行一次任务，同时系统自动传递分片参数；可根据分片参数开发分片任务；

- Cron：触发任务执行的Cron表达式；
- 运行模式：
    BEAN模式：任务以JobHandler方式维护在执行器端；需要结合 "JobHandler" 属性匹配执行器中任务；
    GLUE模式(Java)：任务以源码方式维护在调度中心；该模式的任务实际上是一段继承自IJobHandler的Java类代码并 "groovy" 源码方式维护，它在执行器项目中运行，可使用@Resource/@Autowire注入执行器里中的其他服务；
    GLUE模式(Shell)：任务以源码方式维护在调度中心；该模式的任务实际上是一段 "shell" 脚本；
    GLUE模式(Python)：任务以源码方式维护在调度中心；该模式的任务实际上是一段 "python" 脚本；
    GLUE模式(PHP)：任务以源码方式维护在调度中心；该模式的任务实际上是一段 "php" 脚本；
    GLUE模式(NodeJS)：任务以源码方式维护在调度中心；该模式的任务实际上是一段 "nodejs" 脚本；
    GLUE模式(PowerShell)：任务以源码方式维护在调度中心；该模式的任务实际上是一段 "PowerShell" 脚本；
- JobHandler：运行模式为 "BEAN模式" 时生效，对应执行器中新开发的JobHandler类“@JobHandler”注解自定义的value值；
- 阻塞处理策略：调度过于密集执行器来不及处理时的处理策略；
    单机串行（默认）：调度请求进入单机执行器后，调度请求进入FIFO队列并以串行方式运行；
    丢弃后续调度：调度请求进入单机执行器后，发现执行器存在运行的调度任务，本次请求将会被丢弃并标记为失败；
    覆盖之前调度：调度请求进入单机执行器后，发现执行器存在运行的调度任务，将会终止运行中的调度任务并清空队列，然后运行本地调度任务；
- 子任务：每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取)，当本任务执行结束并且执行成功时，将会触发子任务ID所对应的任务的一次主动调度。
- 任务超时时间：支持自定义任务超时时间，任务运行超时将会主动中断任务；
- 失败重试次数；支持自定义任务失败重试次数，当任务失败时将会按照预设的失败重试次数主动进行重试；
- 报警邮件：任务调度失败时邮件通知的邮箱地址，支持配置多邮箱地址，配置多个邮箱地址时用逗号分隔；
- 负责人：任务的负责人；
- 执行参数：任务执行所需的参数；</code></pre>
                    <h3 id="_42-编辑任务"><span>3. 编辑任务</span>
                    </h3>
                    <p>进入任务管理界面，选中指定任务。点击该任务右侧“编辑”按钮，在弹出的“编辑任务”界面更新任务属性后保存即可，可以修改设置的任务属性信息：</p>
                    <h3 id="_43-编辑glue代码"><span>4. 编辑GLUE代码</span></h3>
                    <p>该操作仅针对GLUE任务。</p>
                    <p>选中指定任务，点击该任务右侧“GLUE”按钮，将会前往GLUE任务的Web IDE界面，在该界面支持对任务代码进行开发。可参考章节 "3.2 GLUE模式(Java)"。</p>
                    <h3 id="_44-启动停止任务"><span>5. 启动/停止任务</span></h3>
                    <p>可对任务进行“启动”和“停止”操作。
                        需要注意的是，此处的启动/停止仅针对任务的后续调度触发行为，不会影响到已经触发的调度任务，如需终止已经触发的调度任务，可查看<br>“9. 终止运行中的任务”</p>
                    <p><img src="${request.contextPath}/static/img/img_ZAhX.png"
                            data-origin="${request.contextPath}/static/img/img_ZAhX.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p>
                    <h3 id="_45-手动触发一次调度"><span>6. 手动触发一次调度</span></h3>
                    <p>点击“执行”按钮，可手动触发一次任务调度，不影响原有调度规则。</p>
                    <p><img src="${request.contextPath}/static/img/img_ZAhX.png"
                            data-origin="${request.contextPath}/static/img/img_ZAhX.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p>
                    <h3 id="_46-查看调度日志"><span>7. 查看调度日志</span></h3>
                    <p>点击“日志”按钮，可以查看任务历史调度日志。在历史调入日志界面可查看每次任务调度的调度结果、执行结果等，点击“执行日志”按钮可查看执行器完整日志。</p>
                    <p><img src="${request.contextPath}/static/img/img_ZAhX.png"
                            data-origin="${request.contextPath}/static/img/img_ZAhX.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p>
                    <p><img src="${request.contextPath}/static/img/img_UDSo.png"
                            data-origin="${request.contextPath}/static/img/img_UDSo.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p>
                    <pre v-pre="" data-lang=""><code class="lang-">调度时间："调度中心"触发本次调度并向"执行器"发送任务执行信号的时间；
调度结果："调度中心"触发本次调度的结果，200表示成功，500或其他表示失败；
调度备注："调度中心"触发本次调度的日志信息；
执行器地址：本次任务执行的机器地址
运行模式：触发调度时任务的运行模式，运行模式可参考章节 "2. 新建任务-->配置属性详细说明"；
任务参数：本地任务执行的入参
执行时间："执行器"中本次任务执行结束后回调的时间；
执行结果："执行器"中本次任务执行的结果，200表示成功，500或其他表示失败；
执行备注："执行器"中本次任务执行的日志信息；
操作：
    "执行日志"按钮：点击可查看本地任务执行的详细日志信息；详见“8. 查看执行日志”；
    "终止任务"按钮：点击可终止本地调度对应执行器上本任务的执行线程，包括未执行的阻塞任务一并被终止；</code></pre>
                    <h3 id="_47-查看执行日志"><span>8. 查看执行日志</span></h3>
                    <p>点击执行日志右侧的 “执行日志” 按钮，可跳转至执行日志界面，可以查看业务代码中打印的完整日志，如下图；</p>
                    <p><img src="${request.contextPath}/static/img/img_tvGI.png"
                            data-origin="${request.contextPath}/static/img/img_tvGI.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p>
                    <h3 id="_48-终止运行中的任务"><span>9. 终止运行中的任务</span></h3>
                    <p>仅针对执行中的任务。
                        在任务日志界面，点击右侧的“终止任务”按钮，将会向本次任务对应的执行器发送任务终止请求，将会终止掉本次任务，同时会清空掉整个任务执行队列。</p>
                    <p><img src="${request.contextPath}/static/img/img_hIci.png"
                            data-origin="${request.contextPath}/static/img/img_hIci.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p>
                    <h3 id="_49-删除执行日志"><span>10. 删除执行日志</span></h3>
                    <p>在任务日志界面，选中执行器和任务之后，点击右侧的"删除"按钮将会出现"日志清理"弹框，弹框中支持选择不同类型的日志清理策略，选中后点击"确定"按钮即可进行日志清理操作；
                        <img src="${request.contextPath}/static/img/img_Ypik.png"
                             data-origin="${request.contextPath}/static/img/img_Ypik.png" alt="输入图片说明"
                             title="在这里输入图片标题"></p>
                    <p><img src="${request.contextPath}/static/img/img_EB65.png"
                            data-origin="${request.contextPath}/static/img/img_EB65.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p>
                    <h3 id="_410-删除任务"><span>11. 删除任务</span>
                    </h3>
                    <p>点击删除按钮，可以删除对应任务。</p>
                    <p><img src="${request.contextPath}/static/img/img_Z9Qr.png"
                            data-origin="${request.contextPath}/static/img/img_Z9Qr.png" alt="输入图片说明"
                            title="在这里输入图片标题"></p></article>
                <p></p>
            </div>
        </section>
        <!-- /.content -->
    </div>
    <!-- /.content-wrapper -->

    <!-- footer -->
    <@netCommon.commonFooter />
</div>
<@netCommon.commonScript />
</body>
</html>
